package business;

import business.EmprestimoBO;
import dao.EmpregadoDAO;
import java.math.BigDecimal;
import model.Empregado;
import model.Emprestimo;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class EmprestimoBOTestTaxaJuros {
    
    public EmprestimoBOTestTaxaJuros(){}
    
    @BeforeClass
    public static void setUpClass() throws Exception {
    try {
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        EmpregadoDAO.getInstance().incluir(empregado);
        } catch (Exception ex) {
            fail("Falha na inclusão de um empregado");
        }
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreUmETresValorMinimo() throws Exception{
    	
    	int numPrestacoes = 1;
    	BigDecimal taxaEsperada = new BigDecimal(0.05);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
	
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreUmETresValorMaximo() throws Exception{
    	
    	int numPrestacoes = 3;
    	BigDecimal taxaEsperada = new BigDecimal(0.05);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreQuatroEDezValorMinimo() throws Exception{
    	
    	int numPrestacoes = 4;
    	BigDecimal taxaEsperada = new BigDecimal(0.065);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreQuatroEDezValorMaximo() throws Exception{
    	
    	int numPrestacoes = 10;
    	BigDecimal taxaEsperada = new BigDecimal(0.065);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreQuatroEDezValorInterno() throws Exception{
    	
    	int numPrestacoes = 6;
    	BigDecimal taxaEsperada = new BigDecimal(0.065);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreOnzeEQuinzeValorMinimo() throws Exception{
    	
    	int numPrestacoes = 11;
    	BigDecimal taxaEsperada = new BigDecimal(0.08);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreDezEQuinzeValorMaximo() throws Exception{
    	
    	int numPrestacoes = 15;
    	BigDecimal taxaEsperada = new BigDecimal(0.08);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreDezEQuinzeValorInterno() throws Exception{
    	
    	int numPrestacoes = 13;
    	BigDecimal taxaEsperada = new BigDecimal(0.08);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreDezesseisEVinteEQuatroValorMinimo() throws Exception{
    	
    	int numPrestacoes = 16;
    	BigDecimal taxaEsperada = new BigDecimal(0.10);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
    
    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreDezesseisEVinteEQuatroValorMaximo() throws Exception{
    	
    	int numPrestacoes = 24;
    	BigDecimal taxaEsperada = new BigDecimal(0.10);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }

    @Test
    public void testTaxaJurosQuandoPrestacaoEEntreDezesseisEVinteEQuatroValorInterno() throws Exception{
    	
    	int numPrestacoes = 20;
    	BigDecimal taxaEsperada = new BigDecimal(0.10);
        
        Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(5000.00), "14134800714", "01/02/91", "01/02/91", "");
        
        Emprestimo emprestimo = new Emprestimo(empregado, new BigDecimal(500.00), null, null, numPrestacoes, null, null);
        emprestimo = EmprestimoBO.getInstance().solicitaEmprestimo(emprestimo);

    	BigDecimal taxa=emprestimo.getTaxaJuros();
    	
    	
    	assertEquals(taxaEsperada,taxa);
    }
}
